package com.edu.handler;
/*
 * @Author:princess
 * @Date 2023/10/30 10 30 19:56
 *
 */

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/*
    调度处理器，作用就是告知 如何增强 被代理对象
 */
public class LogHandler implements InvocationHandler {
    private Object obj;
    //构造 强化器时，传入 被代理对象
    public LogHandler(Object obj){
        this.obj = obj;
    }
    /*
        告知 如何对原始方法进行增强
        proxy 代表了 代理对象（不要对其做任何操作）
        method 指代 原本 要被执行的方法
        args 就代表方法执行时传入的参数

        invoke方法的返回值就相当于增强之后返回的结果
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if(method.getName().contains("select")) {
            long start = System.currentTimeMillis();
            Object invoke = method.invoke(obj, args);
            long end = System.currentTimeMillis();
            System.out.println(method.getName() + "耗时" + (end - start));
            return invoke;
        }
        return method.invoke(obj,args);
    }
}
